package newsSystem.Admin;

import newsSystem.Dept.DeptInfo;
import newsSystem.Dept.DeptManger;
import newsSystem.Main;
import newsSystem.Order.OrderInfo;
import newsSystem.Order.OrderManager;
import newsSystem.dao.DepartmentInfoJDBC;
import newsSystem.dao.OrderInfoJDBC;

import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import static newsSystem.Order.OrderManager.getOrderList;

public class AdminPageTwoJPane {
    private static JTable table1;//报刊信息面板
    private static double Money;//报刊信息面板
    static List<OrderInfo> orderList;
    private static JComboBox<String> deptComboBox;
    private static JTextField accountTextField;
    private static JTextField newspaperNoTextField;
    private static JTextField  newsMoneyTextField;
    private static JButton searchButton;
    private static JButton  AllButton;

    // 添加一个方法用于清空表格内容
    public static void clearTable() {
        System.out.println("清空列表数据");
        orderList.clear();
    }

    public static JPanel createPage() {
        DefaultTableModel tableModel = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int row, int column) {
                // 设置所有单元格不可编辑
                return false;
            }
        };
//        调用OrderJDBC方法
        OrderInfoJDBC.orderJDBC();
//        OrderInfoJDBC.getOrderInfoByUserID(UserID);
//        调用AdminManager的get来测试添加函数,获取管理员数据
        orderList = getOrderList();
        // 添加表头
        String[] columnNames = {"订单编号", "部门名称","用户账号","报刊名称", "订阅份数", "订阅月数", "订阅金额", "订单日期"};

        tableModel.setColumnIdentifiers(columnNames);
        // 创建表格
//        table1.setModel(null);
        table1 = new JTable(tableModel);
//        table1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置选择模式
        // 设置表头的字体大小
        JTableHeader header = table1.getTableHeader();
        Font headerFont = new Font("幼圆", Font.BOLD, 18); // 设置表头字体
        header.setFont(headerFont);
// 设置表格的字体
        Font tableFont = new Font("黑体", Font.PLAIN, 16); // 定义表格字体样式
        table1.setFont(tableFont);

// 设置表格的行高
        table1.setRowHeight(30); // 设置每行的高度为30像素
        // 将报刊列表数据添加到表格中
        for (OrderInfo order : orderList) {
            Object[] rowData = {order.getOrderNo(),order.getAdminID(), order.getUserID(),order.getNewsID(), order.getOrderAmount(), order.getOrderMonth(), order.getOrderPrice(), order.getOrderDate()};
            tableModel.addRow(rowData);
            Money+=Double.parseDouble(order.getOrderPrice());
        }


        JPanel page = new JPanel();
        page.setBounds(0, 0, 900, 450);
        page.setLayout(null); // 不推荐使用 null 布局，但在这种情况下似乎你在尝试自定义组件位置
        page.setBorder(new LineBorder(Color.black));
//        page.setBorder(new LineBorder(Color.blue)); // 这一行实际上取消了上一行设置的边框，作用不大

        // 创建选项面板
         JPanel optionPane = new JPanel();
        optionPane.setBounds(0, 0, 900, 90);

//        optionPane.setLayout(new GridLayout(2, 3)); // 使用网格布局，根据实际情况调整
        optionPane.setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder("查询选项"), // 添加一个带标题的边框
                BorderFactory.createEmptyBorder(5, 5, 5, 5))); // 添加一个空边框，用于留出一些内间距

        // 创建并填充部门下拉框
        DepartmentInfoJDBC.adptJDBC();
        List<String> deptNames = new ArrayList<>();
        for (DeptInfo dept : DeptManger.getDeptList()) {
            deptNames.add(dept.getDeptName()); // 假设 DeptInfo 类有一个 getDeptName 方法
        }
        deptComboBox = new JComboBox<>(deptNames.toArray(new String[0]));
        optionPane.add(new JLabel("部门名称"));
        optionPane.add(deptComboBox);

        // 创建并添加用户账号文本框
        accountTextField = new JTextField(10);

        optionPane.add(new JLabel("用户账号"));
        optionPane.add(accountTextField);

        // 创建并添加报刊编号文本框
        newspaperNoTextField = new JTextField(10);
        optionPane.add(new JLabel("报刊名字"));
        optionPane.add(newspaperNoTextField);

        // 创建并添加报刊编号文本框
        JTextField newsMoneyTextField = new JTextField(10);
        newsMoneyTextField.setText(String.format("%.2f", Money)); // 保留两位小数
//        newsMoneyTextField.setEditable(false);
        optionPane.add(new JLabel("销售额"));
        optionPane.add(newsMoneyTextField);


        // 创建并添加查询按钮
        searchButton = new JButton("查询");
        optionPane.add(searchButton);
        searchButton.addActionListener(e -> {
            String department = (String) deptComboBox.getSelectedItem();
            String account = accountTextField.getText().trim(); // 去除两端空格
            String newspaperNo = newspaperNoTextField.getText().trim(); // 去除两端空格
            System.out.println(department + account + newspaperNo);
//            newsMoneyTextField.setText(""); // 清空文本框内容
            // 根据部门名称、用户账号和报刊编号查询订单信息
                // 处理不同查询条件
                // 简化条件逻辑
                List<OrderInfo> result = new ArrayList<>();
                for (OrderInfo order : orderList) {
                    System.out.println("1"+department+"2"+account+"3"+newspaperNo);
                    if ((department == null || order.getAdminID().equals(department)) &&
                            (account.isEmpty() || order.getUserID().equals(account)) &&
                            (newspaperNo.isEmpty() || order.getNewsID().equals(newspaperNo))) {
                        result.add(order);
                    }
                }

            // 判断结果是否为空
            if (result.isEmpty()) {
                JOptionPane.showMessageDialog(null, "当前订单信息为空,请重新查询！", "提示", JOptionPane.WARNING_MESSAGE);
            } else {
                // 清空原有表格数据
                while (tableModel.getRowCount() > 0) {
                    tableModel.removeRow(0);
                }

                // 计算总销售额
                double MMoney = 0;
                for (OrderInfo order : result) {
                    MMoney +=Double.parseDouble(order.getOrderPrice());
                    Object[] rowData = {order.getOrderNo(), order.getAdminID(), order.getUserID(), order.getNewsID(), order.getOrderAmount(), order.getOrderMonth(), order.getOrderPrice(), order.getOrderDate()};
                    tableModel.addRow(rowData);
                }
                System.out.println(Money);
                // 将总销售额显示在newsMoneyTextField中
//            newsMoneyTextField.setEditable(true);
                newsMoneyTextField.setText(String.format("%.2f", MMoney)); // 保留两位小数
//            newsMoneyTextField.setEditable(false);
            }

        });



        // 创建并添加查询按钮
        AllButton = new JButton("全部");
        optionPane.add(AllButton);
        AllButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                accountTextField.setText("");
                newspaperNoTextField.setText("");
                // 清空表格模型中的数据
                tableModel.setRowCount(0);

                // 遍历orderList，为每个订单创建一行数据，并添加到表格模型中
                for (OrderInfo order : orderList) {
                    Object[] rowData = {order.getOrderNo(), order.getAdminID(), order.getNewsID(), order.getNewsID(), order.getOrderAmount(), order.getOrderMonth(), order.getOrderPrice(), order.getOrderDate()};
                    tableModel.addRow(rowData);
                    Money += Double.parseDouble(order.getOrderPrice());
                    newsMoneyTextField.setText(String.format("%.2f", Money));
                }

                // 重新渲染表格
                table1.repaint();
            }
        });



//        optionPane.setBorder(new LineBorder(Color.blue));
        page.add(optionPane); // 将 OptionPane 添加到 page 上
        JScrollPane scrollPane = new JScrollPane(table1);
        scrollPane.setBorder(null);
        scrollPane.setBounds(0, 90, 900, 360);
        page.add(scrollPane); // 将 JScrollPane 添加到 page 上
        return page;
    }

}
